#include <iostream>
#include <unistd.h>
#include <stdlib.h>
#include <string>
#include <signal.h>

// void Handler(int signo)
// {
//     // 当对应的信号被触发，内核会将对应的信号编号，传递给自定义方法
//     std::cout << "Get a signal, signal number is : " << signo << std::endl;
// }

// int main()
// {
//     // signal 为什么不放在循环里面？ 不需要，只需要设置一次就可以了
//     // signal：如果没有产生2或者3号信号呢？ handler不被调用！
//     // signal(SIGINT, Handler);// 默认终止 --改成了--> 执行自定义方法：Handler
//     // signal(SIGQUIT, Handler);// 默认终止 --改成了--> 执行自定义方法：Handler

//     for (int signo = 1; signo < 32; signo++)
//     {
//         signal(signo, Handler);
//         std::cout << "自定义捕捉信号：" << signo << std::endl;
//     }

//     while (true)
//     {
//         std::cout << "hello world" << std::endl;
//         sleep(1);
//     }

//     return 0;
// }


// 设置自己的kill

// void Usage(std::string proc)
// {
//     std::cout << "Usage: " << proc << " signumber processid " << std::endl;
// }


// // ./mykill  1信号    12345进程号
// int main(int argc, char *argv[])
// {
//     if(argc != 3)
//     {
//         Usage(argv[0]);
//         exit(1);
//     }

//     int signumber = std::stoi(argv[1]);// 转换为整数
//     pid_t id = std::stoi(argv[2]);

//     int n = ::kill(id, signumber);
//     if(n < 0)
//     {
//         perror("kill");
//         exit(2);
//     }

//     exit(0);
// }


// int main()
// {
//     int cnt = 5;
//     while(true)
//     {
//         std::cout << "hahaha alive" << std::endl;
//         cnt--;
//         if(cnt <= 0)
//             // raise(9);
//             // abort();
//         sleep(1);
//     }
// }

int main()
{
    // 统计我的服务器 1s 可以将计数器累加多少！
    alarm(1);// 我自己，会在 1s 之后收到一个SIGALARM信号
    int number = 0;
    while(true)
    {
        printf("count: %d\n", number);
    }
    
}

int number = 0;
void die(int signumber)
{
    printf("get a sig : %d, count: %d\n", signumber, number);
    exit(0);
}

int main()
{
    // 统计我的服务器 1s 可以将计数器累加多少！
    alarm(1);// 我自己，会在 1s 之后收到一个SIGALARM信号
    signal(SIGALRM, die);
    while(true)
    {
        number++;
    }
    
}